package com.offics.loan.domain.entity;

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;

import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 贷款产品实体类
 */
@Data
@TableName("loan_loan_product")
public class LoanProduct {

    /**
     * 产品ID
     */
    @TableId(type = IdType.AUTO)
    private Long id;

    /**
     * 产品名称
     */
    private String name;

    /**
     * 最小金额（单位：分）
     */
    private Long minAmount;

    /**
     * 最大金额（单位：分）
     */
    private Long maxAmount;

    /**
     * 最小期限（单位：月）
     */
    private Integer minPeriod;

    /**
     * 最大期限（单位：月）
     */
    private Integer maxPeriod;

    /**
     * 贷款利率（年化）
     */
    private BigDecimal interestRate;

    /**
     * 产品描述
     */
    private String description;

    /**
     * 状态（0-禁用，1-启用）
     */
    private Integer status;

    /**
     * 是否删除（0-未删除，1-已删除）
     */
    @TableLogic
    private Integer deleted;

    /**
     * 创建时间
     */
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;

    /**
     * 检查产品是否启用
     *
     * @return 是否启用
     */
    public boolean isEnabled() {
        return status != null && status == 1;
    }

    /**
     * 检查贷款金额是否在产品允许范围内
     *
     * @param amount 贷款金额
     * @return 是否在允许范围内
     */
    public boolean isAmountInRange(Long amount) {
        return amount != null && amount >= minAmount && amount <= maxAmount;
    }

    /**
     * 检查贷款期限是否在产品允许范围内
     *
     * @param period 贷款期限
     * @return 是否在允许范围内
     */
    public boolean isPeriodInRange(Integer period) {
        return period != null && period >= minPeriod && period <= maxPeriod;
    }
}